%-------------------------------------------------------------------------------------------------------------------------------------------------------------%
Author  : Arunkumar K. P.
Address : Ph.D. Scholar,
          Signal Processing for Communications Lab, ECE Department,
          Indian Institute of Science, Bangalore, India-560 012.
Email   : arunkumar@iisc.ac.in

REVISION HISTORY
 Version : 2.1
 Last Revision: 05-02-2018

These scripts/programs are released under the Commons Creative Licence with Attribution Non-commercial Share Alike (by-nc-sa) 
http://creativecommons.org/licenses/by-nc-sa/3.0/

Short Disclaimer: this script is for educational purpose only.
%-------------------------------------------------------------------------------------------------------------------------------------------------------------%

Description:
This folder contains bare-bones program for demonstrating the main idea proposed in our paper [*]. In the paper, we propose a scheme for data detection in a CP-OFDM system for the doubly-spread underwater acoustic channel. In particular, we develop an iterative data detection and sparse channel estimation framework at the output of partial interval demodulator (PID). The program performs Monte Carlo simulations to compare the bit error rates (BER) of the proposed PID based schemes with the full interval demodulation (FID) scheme proposed by Berger et al. This basic version implements only uncoded QPSK communications for illustrating the main point, namely, that the combination of PID, iterative data detection, and sparse channel estimation significantly improves the performance in a highly Doppler spread channel. (Channel encoding and decoding, which is not included in this basic version, would only further enhance the relative performance difference.)

[*] Arunkumar K. P. and Chandra R. Murthy, "Iterative Sparse Channel Estimation and Data Detection for Underwater Acoustic Communications Using Partial Interval Demodulation",  IEEE Transactions on Signal Processing ( Volume: 66 , Issue: 19 , Oct.1, 1 2018 )
%-------------------------------------------------------------------------------------------------------------------------------------------------------------%

Following is the script to open and run in Matlab:

1. uwacStart.m: 
	this is the code to edit & run. All parameters are set in uwacStart.m. The parameters include CP-OFDM system configuration, pilot and null carrier arrangements, parameters of the channel model such as the SNR range and Doppler scale etc. Also, various buffers used to store the results are initialised in uwacStart.m. 

Following are the sripts called by uwacStart.m

2. uwacRun.m: 
	the start-up script uwacStart.m makes a call to uwacRun.m which carries out the Monte Carlo simulations. The simulations are paralleled across SNRs. The script uwacRun.m in turn calls uwacSnrRun.m to carry out BER estimation across SNRs.

3. uwacSnrRun.m
	this script, invoked by uwacRun.m, carries out BER computations across multiple SNRs.

Following is the list of other scripts and functions used:

Utility Scripts: 

(1) uwacPlotBER.m
        to plot BER results 

Functions: 

(1) uwacResponse.m
	simulates received signal at the output of p-FFT demodulator output after propagation through a randomly drawn channel.

(2) uwacMeasurementMatrix.m 	
	constructs CS dictionary corresponding to p-FFT demodulator output 

(3) uwacChannelMatrix.m
	constructs channel matrix as seen at the partial-FFT demodulator output given the channel vector on the delay-Doppler plane

(4) uwacJCEDD.m
     	Sparse channel recovery and data detection for full/partial-FFT demodulator outputs according to input arguments

(5)  uwacOptimPartialFFTCombinerWts.m
         forms combining weights for partial FFT demodulator outputs to make the equivalent channel matrix nearly diagonal.

(6) uwacLCEDD.m
	  LS channel decoder (adopted from Elango's code listing and modified)
